iT邦幫忙

2024 iThome 鐵人賽

DAY 13
0

今天的目標是為爬蟲過程添加日誌記錄和進度追蹤功能。

這些功能能夠幫助我在抓取大量數據時了解整體進度,並在出現錯誤時快速定位問題,原因是因為當處理成千上萬個基因數據時,這些工具能夠顯著提高開發效率和故障排查能力。

進度追蹤:當處理大規模數據時,使用進度條來顯示抓取進度是一種非常有效的方式。進度條能夠實時告知還有多少數據未被處理,幫助估算總共需要的時間。

from tqdm import tqdm
async def fetch_all_gene_pages(urls):
    async with aiohttp.ClientSession() as session:
        tasks = []
        for url in tqdm(urls, desc="Fetching gene pages"):
            tasks.append(fetch_gene_page(session, url))
        pages = await asyncio.gather(*tasks)
        return pages

在上面這段 Code 中,我使用了 tqdm 來顯示一個進度條,tqdm 是一個進度條工具,能夠快速集成到各種 Python 迴圈中;在這邊我將進度條與 aiohttp 非同步爬蟲結合,顯示當前抓取過程中的過程。

日誌記錄:此外我還設置了日誌記錄系統,記錄每個請求的結果,特別是出現錯誤的情況,這能夠幫助我在處理失敗的請求時,更快找到錯誤的源頭。

import logging
logging.basicConfig(filename='爬蟲日誌.log', level=logging.INFO, format='%(asctime)s - %(message)s')
async def fetch_gene_page(session, url, retries=3):
    for attempt in range(retries):
        try:
            async with session.get(url, timeout=10) as response:
                response.raise_for_status() 
                logging.info(f"Successfully fetched {url}")
                return await response.text()
        except (aiohttp.ClientError, aiohttp.http_exceptions.HttpProcessingError) as e:
            logging.error(f"Error fetching {url}: {str(e)}")
            if attempt < retries - 1:
                await asyncio.sleep(2)
                continue
            else:
                logging.error(f"Failed to fetch {url} after {retries} attempts.")
                return None

在上面這段 Code 中我設置了日誌系統,並在每次請求成功或失敗時記錄相應的日誌訊息,這能夠幫助我在出現問題時快速定位錯誤。

進度條和日誌系統的引入,能夠顯著提升我的開發效率,特別是在處理大規模數據時,這些工具能夠讓我隨時掌握爬蟲的進展情況,並及時應對可能發生的問題。


上一篇
Day12:優化爬蟲的性能與數據抓取效率
下一篇
Day14:處理爬蟲過程中的異常情況
系列文
從零基礎到實戰:利用網頁爬蟲結合 RPKM 算法計算 COVID-19 感染者肺部基因表達量25
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言